home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_MONSW.ZIP / Monopoly StarWars.txt < prev    next >
Encoding:
Text File  |  1998-11-11  |  19.7 KB  |  427 lines

  1.  
  2. Free Information Xchange presents:
  3.  
  4. Monopoly StarWars Edition - CD crack by Static Vengeance - Nov, 4th 1998
  5.  
  6. Requirements:
  7. Hex editor and full game install
  8. W32Dasm if you wish to follow along
  9.  
  10.     The StarWars Edition of Monopoly is a glitzy little hopped up multi-media version of the original
  11. board game.  It contains tons of video clips from the three StarWars (special enhanced edition) movies.  There
  12. is one slight problem when playing this game.  You need to have the CD on line.  There is an option during the
  13. install to copy all the movie files to your hard drive, but that will take up over 530 megs!  Even with this
  14. option, you'll STILL need the CD in your CD-Rom drive.  What's the point!?!?, who is going to download a 350+
  15. meg (even if compressed) pirated version off some ftp site?  Either way, this is a program bug that must be
  16. FiX'ed.  First we'll need to start up W32Dasm and disassemble monopoly.exe.  Then once you have gotten that far
  17. do the usual and go up to the menu bar and select REFS and then Data String References from the drop down menu.
  18. Once the Data string refs pop-up box apears, grab the slider bar and scroll down until you see "This game requires
  19. you to have " which is part of the pop-up dialog box that let's you know you need the CD to play the game.  After
  20. you find it, double click it and W32Dasm will drop you in the middle of this routine:
  21.  
  22. * Referenced by a CALL at Address:
  23. |:0044C895                                              <-- Called once
  24. |
  25. :0043B6B0 83EC04                  sub esp, 00000004
  26. :0043B6B3 C744240001000000        mov [esp], 00000001
  27. :0043B6BB 53                      push ebx
  28. :0043B6BC 56                      push esi
  29. :0043B6BD 57                      push edi
  30. :0043B6BE 55                      push ebp
  31. :0043B6BF 6870106900              push 00691070
  32. :0043B6C4 6805010000              push 00000105
  33.  
  34. * Reference To: KERNEL32.GetCurrentDirectoryA, Ord:00D0h
  35.                                   |
  36. :0043B6C9 FF158C756900            Call dword ptr [0069758C]
  37. :0043B6CF 85C0                    test eax, eax
  38. :0043B6D1 750D                    jne 0043B6E0
  39. :0043B6D3 C744241000000000        mov [esp+10], 00000000
  40. :0043B6DB E96F010000              jmp 0043B84F
  41.  
  42. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  43. |:0043B6D1(C)
  44. |
  45. :0043B6E0 BF70106900              mov edi, 00691070
  46. :0043B6E5 B9FFFFFFFF              mov ecx, FFFFFFFF
  47. :0043B6EA 2BC0                    sub eax, eax
  48. :0043B6EC 6870106900              push 00691070
  49. :0043B6F1 F2                      repnz
  50. :0043B6F2 AE                      scasb
  51. :0043B6F3 66A178A14800            mov ax, word ptr [0048A178]
  52.  
  53. * Possible StringData Ref from Data Obj ->"%sVIDEOS\"
  54.                                   |
  55. :0043B6F9 687CA14800              push 0048A17C
  56. :0043B6FE 668947FF                mov word ptr [edi-01], ax
  57. :0043B702 6830ED6300              push 0063ED30
  58. :0043B707 E884670300              call 00471E90
  59. :0043B70C 83C40C                  add esp, 0000000C
  60. :0043B70F 6840EE6300              push 0063EE40
  61.  
  62. * Possible StringData Ref from Data Obj ->"%sDATA\"
  63.                                   |
  64. :0043B714 6888A14800              push 0048A188
  65. :0043B719 6840EE6300              push 0063EE40
  66. :0043B71E E86D670300              call 00471E90
  67. :0043B723 83C40C                  add esp, 0000000C
  68. :0043B726 E875040000              call 0043BBA0          <-- Check for the CD
  69. :0043B72B 84C0                    test al, al            <-- Test the result stored in al
  70. :0043B72D 7450                    je 0043B77F            <-- al=0 means no CD
  71. :0043B72F 0FBEF0                  movsx esi, al
  72.  
  73. * Possible StringData Ref from Data Obj ->"\MONOPOLY"
  74.                                   |
  75. :0043B732 6890A14800              push 0048A190
  76. :0043B737 56                      push esi
  77.  
  78. * Possible StringData Ref from Data Obj ->"%c:%s\"
  79.                                   |
  80. :0043B738 689CA14800              push 0048A19C
  81. :0043B73D 6818EA6300              push 0063EA18
  82. :0043B742 E849670300              call 00471E90
  83. :0043B747 83C410                  add esp, 00000010
  84.  
  85. * Possible StringData Ref from Data Obj ->"\MONOPOLY"
  86.                                   |
  87. :0043B74A 68A4A14800              push 0048A1A4
  88. :0043B74F 56                      push esi
  89.  
  90. * Possible StringData Ref from Data Obj ->"%c:%s\"
  91.                                   |
  92. :0043B750 68B0A14800              push 0048A1B0
  93. :0043B755 6828EC6300              push 0063EC28
  94. :0043B75A E831670300              call 00471E90
  95. :0043B75F 83C410                  add esp, 00000010
  96.  
  97. * Possible StringData Ref from Data Obj ->"\MONOPOLY\VIDEOS"
  98.                                   |
  99. :0043B762 68B8A14800              push 0048A1B8
  100. :0043B767 56                      push esi
  101.  
  102. * Possible StringData Ref from Data Obj ->"%c:%s\"
  103.                                   |
  104. :0043B768 68CCA14800              push 0048A1CC
  105. :0043B76D 6820EB6300              push 0063EB20
  106. :0043B772 E819670300              call 00471E90
  107. :0043B777 83C410                  add esp, 00000010
  108. :0043B77A E9D0000000              jmp 0043B84F
  109.  
  110. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  111. |:0043B72D(C)                                                        <-- Conditional jump to pop-up dialog
  112. |
  113. :0043B77F 33FF                    xor edi, edi
  114.  
  115. * Possible StringData Ref from Data Obj ->"LE_CMAIN_CURSOR"
  116.                                   |
  117. :0043B781 68D4A14800              push 0048A1D4
  118. :0043B786 E80588FDFF              call 00413F90
  119. :0043B78B 83C404                  add esp, 00000004
  120. :0043B78E E83D88FDFF              call 00413FD0
  121.  
  122. * Reference To: USER32.PostQuitMessage, Ord:01B3h
  123.                                   |
  124. :0043B793 8B3578776900            mov esi, dword ptr [00697778]
  125.  
  126. * Reference To: USER32.DestroyWindow, Ord:008Ah
  127.                                   |
  128. :0043B799 8B1D74776900            mov ebx, dword ptr [00697774]
  129.  
  130. * Reference To: USER32.MessageBoxA, Ord:0195h
  131.                                   |
  132. :0043B79F 8B2D7C776900            mov ebp, dword ptr [0069777C]
  133.  
  134. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  135. |:0043B844(C)
  136. |
  137. :0043B7A5 6815100000              push 00001015
  138.  
  139. * Possible StringData Ref from Data Obj ->"MONOPOLY Star Wars"
  140.                                   |
  141. :0043B7AA 68E4A14800              push 0048A1E4
  142.  
  143. * Possible StringData Ref from Data Obj ->"This game requires you to have "  <-- String that lead us here
  144.                                         ->"your Monopoly Star Wars CD-ROM "
  145.                                         ->"in a drive."
  146.                                   |
  147. :0043B7AF 68F8A14800              push 0048A1F8
  148. :0043B7B4 6A00                    push 00000000
  149. :0043B7B6 FFD5                    call ebp
  150. :0043B7B8 83F804                  cmp eax, 00000004
  151. :0043B7BB 755B                    jne 0043B818
  152. :0043B7BD E8DE030000              call 0043BBA0              <-- Check for the CD again
  153. :0043B7C2 84C0                    test al, al                <-- Test for the result in al
  154. :0043B7C4 747C                    je 0043B842                <-- Zero in al means ask for the CD again
  155. :0043B7C6 0FBEF8                  movsx edi, al
  156.  
  157. * Possible StringData Ref from Data Obj ->"\MONOPOLY"
  158.                                   |
  159. :0043B7C9 68D8A24800              push 0048A2D8
  160. :0043B7CE 57                      push edi
  161.  
  162. * Possible StringData Ref from Data Obj ->"%c:%s\"
  163.                                   |
  164. :0043B7CF 68E4A24800              push 0048A2E4
  165. :0043B7D4 6818EA6300              push 0063EA18
  166. :0043B7D9 E8B2660300              call 00471E90
  167. :0043B7DE 83C410                  add esp, 00000010
  168.  
  169. * Possible StringData Ref from Data Obj ->"\MONOPOLY"
  170.                                   |
  171. :0043B7E1 68ECA24800              push 0048A2EC
  172. :0043B7E6 57                      push edi
  173.  
  174. * Possible StringData Ref from Data Obj ->"%c:%s\"
  175.                                   |
  176. :0043B7E7 68F8A24800              push 0048A2F8
  177. :0043B7EC 6828EC6300              push 0063EC28
  178. :0043B7F1 E89A660300              call 00471E90
  179. :0043B7F6 83C410                  add esp, 00000010
  180.  
  181. * Possible StringData Ref from Data Obj ->"\MONOPOLY\VIDEOS"
  182.                                   |
  183. :0043B7F9 6800A34800              push 0048A300
  184. :0043B7FE 57                      push edi
  185.  
  186. * Possible StringData Ref from Data Obj ->"%c:%s\"
  187.                                   |
  188. :0043B7FF 6814A34800              push 0048A314
  189. :0043B804 BF01000000              mov edi, 00000001
  190. :0043B809 6820EB6300              push 0063EB20
  191. :0043B80E E87D660300              call 00471E90
  192. :0043B813 83C410                  add esp, 00000010
  193. :0043B816 EB2A                    jmp 0043B842
  194.  
  195. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  196. |:0043B7BB(C)
  197. |
  198. :0043B818 E8D387FDFF              call 00413FF0
  199. :0043B81D 6A00                    push 00000000
  200. :0043B81F FFD6                    call esi
  201. :0043B821 A1A0506900              mov eax, dword ptr [006950A0]
  202. :0043B826 50                      push eax
  203. :0043B827 FFD3                    call ebx
  204. :0043B829 E86209FEFF              call 0041C190
  205. :0043B82E E85D09FEFF              call 0041C190
  206. :0043B833 E85809FEFF              call 0041C190
  207. :0043B838 6AFF                    push FFFFFFFF
  208. :0043B83A E8315B0300              call 00471370
  209. :0043B83F 83C404                  add esp, 00000004
  210.  
  211. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  212. |:0043B7C4(C), :0043B816(U)
  213. |
  214. :0043B842 85FF                    test edi, edi
  215. :0043B844 0F845BFFFFFF            je 0043B7A5
  216. :0043B84A E8A187FDFF              call 00413FF0
  217.  
  218. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  219. |:0043B6DB(U), :0043B77A(U)
  220. |
  221. :0043B84F 8B442410                mov eax, dword ptr [esp+10]
  222. :0043B853 5D                      pop ebp
  223. :0043B854 5F                      pop edi
  224. :0043B855 5E                      pop esi
  225. :0043B856 5B                      pop ebx
  226. :0043B857 83C404                  add esp, 00000004
  227. :0043B85A C3                      ret
  228.  
  229.     This is a short routine that tells the user they need the CD to play the game.  I found the
  230. CD check routine by looking for the first condition jump reference before the pop-up dialog text.  The
  231. jump came from 43B72D and at 43B726 you see a call 0043BBA0 instruction followed by the test al, al
  232. instruction.  So we should check out the code at 43BBA0 and find out what it does:
  233.  
  234. * Referenced by a CALL at Addresses:
  235. |:0043B726   , :0043B7BD                             <-- Called twice from the above listed code
  236. |
  237. :0043BBA0 81EC14020000            sub esp, 00000214
  238. :0043BBA6 53                      push ebx
  239. :0043BBA7 56                      push esi
  240. :0043BBA8 57                      push edi
  241. :0043BBA9 B343                    mov bl, 43
  242. :0043BBAB 55                      push ebp
  243.  
  244. * Reference To: KERNEL32.GetDriveTypeA, Ord:00DEh                 <-- Commonly used in CD checks
  245.                                   |
  246. :0043BBAC 8B2D84756900            mov ebp, dword ptr [00697584]   <-- Put the call address in ebp
  247.  
  248. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  249. |:0043BC1D(C)
  250. |
  251. :0043BBB2 0FBEC3                  movsx eax, bl
  252. :0043BBB5 8D4C2414                lea ecx, dword ptr [esp+14]
  253. :0043BBB9 50                      push eax
  254.  
  255. * Possible StringData Ref from Data Obj ->"%c:\"
  256.                                   |
  257. :0043BBBA 6834A34800              push 0048A334
  258. :0043BBBF 51                      push ecx
  259. :0043BBC0 E8CB620300              call 00471E90
  260. :0043BBC5 8D4C2420                lea ecx, dword ptr [esp+20]
  261. :0043BBC9 83C40C                  add esp, 0000000C
  262. :0043BBCC 51                      push ecx
  263. :0043BBCD FFD5                    call ebp                            <-- Make the "GetDriveTypeA" call
  264. :0043BBCF 83F805                  cmp eax, 00000005                   <-- 05 is the valued for a CD-Rom
  265. :0043BBD2 7544                    jne 0043BC18
  266. :0043BBD4 8B442410                mov eax, dword ptr [esp+10]
  267. :0043BBD8 8D4C2410                lea ecx, dword ptr [esp+10]
  268. :0043BBDC 8D542414                lea edx, dword ptr [esp+14]
  269. :0043BBE0 50                      push eax
  270. :0043BBE1 8D842420010000          lea eax, dword ptr [esp+00000120]
  271. :0043BBE8 6A00                    push 00000000
  272. :0043BBEA 51                      push ecx
  273. :0043BBEB 8D4C241C                lea ecx, dword ptr [esp+1C]
  274. :0043BBEF 51                      push ecx
  275. :0043BBF0 6A00                    push 00000000
  276. :0043BBF2 6805010000              push 00000105
  277. :0043BBF7 50                      push eax
  278. :0043BBF8 52                      push edx
  279.  
  280. * Reference To: KERNEL32.GetVolumeInformationA, Ord:014Eh         <-- Get the volume string
  281.                                   |
  282. :0043BBF9 FF1588756900            Call dword ptr [00697588]
  283. :0043BBFF 85C0                    test eax, eax
  284. :0043BC01 7415                    je 0043BC18
  285. :0043BC03 8DB4241C010000          lea esi, dword ptr [esp+0000011C]
  286.  
  287. * Possible StringData Ref from Data Obj ->"MONOPOLY"              <-- The string should be this
  288.                                   |
  289. :0043BC0A BF3CA34800              mov edi, 0048A33C
  290. :0043BC0F B909000000              mov ecx, 00000009               <-- Number of characters to compare + 1
  291. :0043BC14 F3                      repz                            <-- Repeat until ecx is zero
  292. :0043BC15 A6                      cmpsb                           <-- CoMPare String Bytes (CMPSB)
  293. :0043BC16 7407                    je 0043BC1F                     <-- They should be the same, jump equal
  294.  
  295. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  296. |:0043BBD2(C), :0043BC01(C)
  297. |
  298. :0043BC18 FEC3                    inc bl                          <-- Increment drive letter
  299. :0043BC1A 80FB5A                  cmp bl, 5A                      <-- Compare against last drive letter
  300. :0043BC1D 7E93                    jle 0043BBB2                    <-- Keep trying drive letters
  301.  
  302. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  303. |:0043BC16(C)
  304. |
  305. :0043BC1F 80FB5A                  cmp bl, 5A                      <-- Did we exceed the last drive letter
  306. :0043BC22 7E02                    jle 0043BC26                    <-- If no, then skip "set for fail"
  307. :0043BC24 32DB                    xor bl, bl                      <-- Set for fail, ZERO out bl
  308.  
  309. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  310. |:0043BC22(C)
  311. |
  312. :0043BC26 8AC3                    mov al, bl                      <-- Move bl into al, zero means no CD!
  313. :0043BC28 5D                      pop ebp
  314. :0043BC29 5F                      pop edi
  315. :0043BC2A 5E                      pop esi
  316. :0043BC2B 5B                      pop ebx
  317. :0043BC2C 81C414020000            add esp, 00000214
  318. :0043BC32 C3                      ret                             <-- Return to caller
  319.  
  320.     Okay, you can see how Monopoly checked for it's CD.  Now we have to make sure the game "thinks" the
  321. CD is in the CD-Rom drive.  When looking at the first section of code, you can see it's called once.  This
  322. is good, so let's check out the caller and surounding code:
  323.  
  324.   -- Program code --
  325. :0044C891 85C0                    test eax, eax
  326. :0044C893 740E                    je 0044C8A3
  327. :0044C895 E816EEFEFF              call 0043B6B0                     <-- Check for the CD
  328.  
  329. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  330. |:0044C887(C)
  331. |
  332. :0044C89A 85C0                    test eax, eax                     <-- Test result store in eax
  333. :0044C89C 740E                    je 0044C8AC                       <-- Need to "fall through" this jump
  334. :0044C89E E89D840100              call 00464D40
  335.  
  336. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  337. |:0044C893(C)
  338. |
  339. :0044C8A3 85C0                    test eax, eax
  340. :0044C8A5 740E                    je 0044C8B5
  341. :0044C8A7 E8446B0100              call 004633F0
  342.  
  343. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  344. |:0044C89C(C)
  345. |
  346. :0044C8AC 85C0                    test eax, eax
  347.   -- Continuing program code --
  348.  
  349.     Alright, just change the call to the CD check to mov eax, 00000001 and the game will always
  350. continue as though the CD is on-line.  The last thing you'll need to do is make sure the game doesn't
  351. try to play the AVI files for the game.  So it's back up to the data string references box and double
  352. click on the ".avi" string and you'll find this:
  353.  
  354. * Referenced by a CALL at Address:
  355. |:0042E58A   
  356. |
  357. :0042F1B0 8B442404                mov eax, dword ptr [esp+04]
  358. :0042F1B4 81EC04010000            sub esp, 00000104
  359. :0042F1BA 8BC8                    mov ecx, eax
  360. :0042F1BC C1E104                  shl ecx, 04
  361. :0042F1BF 53                      push ebx
  362. :0042F1C0 56                      push esi
  363. :0042F1C1 03C8                    add ecx, eax
  364. :0042F1C3 57                      push edi
  365.  
  366. * Possible StringData Ref from Data Obj ->".avi"
  367.                                   |
  368. :0042F1C4 BE609D4800              mov esi, 00489D60
  369. :0042F1C9 8D0488                  lea eax, dword ptr [eax+4*ecx]
  370. :0042F1CC B9FFFFFFFF              mov ecx, FFFFFFFF
  371. :0042F1D1 8D14850CEB6100          lea edx, dword ptr [4*eax+0061EB0C]
  372. :0042F1D8 8D1C8500000000          lea ebx, dword ptr [4*eax+00000000]
  373.   -- Snip the rest of this routine --
  374.  
  375.     Alright, that's the string we wanted, we are not concerned with what the routine does or what other
  376. routines it calls.  We just want to stop it from being run.  So now we need to check out the caller at
  377. 42E58A.  That bit of code looks like this:
  378.  
  379. :0042E585 85C0                    test eax, eax              <-- Test for no video from options
  380. :0042E587 740B                    je 0042E594                <-- Take this jump for no videos
  381. :0042E589 53                      push ebx                   <-- Push value on stack
  382. :0042E58A E8210C0000              call 0042F1B0              <-- Play video
  383. :0042E58F 83C404                  add esp, 00000004          <-- Adjust stack for the push ebx
  384. :0042E592 892F                    mov dword ptr [edi], ebp
  385.  
  386. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  387. |:0042E565(C), :0042E572(C), :0042E583(U), :0042E587(C)
  388. |
  389. :0042E594 81C714010000            add edi, 00000114
  390. :0042E59A 43                      inc ebx
  391.  
  392.     I decided to change the call 0042F1B0 to mov eax, 00000000 so the videos are never played reguardless
  393. of the setting of the user's perferences.  Killing both the play avi call and the CD check results in a cracked
  394. copy of Monopoly StarWars edition that can be run from your hard drive without the need for the original CD.
  395. I have included the edits for the original CD version of the game and the updated patch off the net.
  396.  
  397. 1. Do a full game install without the movies
  398. 2. Make the following edits:
  399.  
  400. For v1.00z off the CD edit Monopoly.exe
  401. =============================================
  402. Search for: E8 16 EE FE FF  at offset 313,493
  403. Change to : B8 01 00 00 00
  404.  
  405.   -- Kill the avi movie patch --
  406. Search for: E8 21 0C 00 00  at offset 189,834
  407. Change to : B8 00 00 00 00
  408.  
  409.  
  410. For v1.03b off the net edit Monopoly.exe
  411. =============================================
  412. Search for: E8 86 E6 FE FF  at offset 317,701
  413. Change to : B8 01 00 00 00
  414.  
  415.   -- Kill the avi movie patch --
  416. Search for: E8 11 0D 00 00  at offset 190,490
  417. Change to : B8 00 00 00 00
  418.  
  419.     There you have yet another game FiX'ed and freed of it's need for the CD to be online when
  420. you want to play it.  And that concludes today's CD cracking tutorial, thanks for tuning in!
  421.  
  422. Static Vengeance - FiX
  423.  
  424.     Optional, if you want the movies, do the full 530+ meg install and skip the "Kill the avi movie patch"
  425. This will give you a 100% complete working version of the game, but it'll eat up quite a chunk of your hard
  426. drive.  Otherwise, do complete install (minus the movies) and make both edits.
  427.